home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 March / Macworld (1998-03) (Disk 1).dmg / Shareware World / Info / For Developers / GhostScript 5.10 / MacGS-510 / doc / language.txt < prev    next >
Text File  |  1997-11-20  |  30KB  |  769 lines

  1.    Copyright (C) 1989, 1995, 1996, 1997 Aladdin Enterprises.  All rights reserved.
  2.   
  3.   This file is part of Aladdin Ghostscript.
  4.   
  5.   Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  6.   or distributor accepts any responsibility for the consequences of using it,
  7.   or for whether it serves any particular purpose or works at all, unless he
  8.   or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  9.   License (the "License") for full details.
  10.   
  11.   Every copy of Aladdin Ghostscript must include a copy of the License,
  12.   normally in a plain ASCII text file named PUBLIC.  The License grants you
  13.   the right to copy, modify and redistribute Aladdin Ghostscript, but only
  14.   under certain conditions described in the License.  Among other things, the
  15.   License requires that the copyright notice and this notice be preserved on
  16.   all copies.
  17.  
  18. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  19.  
  20. This file, language.txt, describes the relationship between the Ghostscript
  21. interpreter and the PostScript language.
  22.  
  23. For an overview of Ghostscript and a list of the documentation files, see
  24. README.
  25.  
  26. The Ghostscript interpreter, except as noted below, is intended to execute
  27. properly any source program written in the (Level 2) PostScript language as
  28. defined in the December 1990 printing of the PostScript Language Reference
  29. Manual (Second Edition) published by Addison-Wesley (ISBN 0-201-18127-4).
  30. However, the interpreter is configurable in ways that can restrict it to
  31. various subsets of this language.  Specifically, the base interpreter
  32. accepts the Level 1 subset of the PostScript language, as defined in the
  33. first edition of the PostScript Language Reference Manual, ISBN
  34. 0-201-10174-2, Addison-Wesley, 1985, plus the file system, version 25.0
  35. language, and miscellaneous additions listed in sections A.1.6, A.1.7, and
  36. A.1.8 of the Second Edition respectively, including allowing a string
  37. operand for the 'status' operator.  The base interpreter may be configured
  38. by adding any combination of the following:
  39.  
  40.     - The ability to process PostScript Type 1 fonts.  This facility is
  41. normally included in the interpreter.
  42.  
  43.     - The CMYK color extensions listed in section A.1.4 of the Second
  44. Edition (including colorimage).  These facilities are only available if the
  45. color, dps, or level2 feature was selected at the time that Ghostscript was
  46. compiled and linked.
  47.  
  48.     - The Display PostScript extensions listed in section A.1.3
  49. of the Second Edition, but excluding the operators listed in section
  50. A.1.2.  These facilities are only available if the dps feature or the
  51. level2 feature was selected at the time that Ghostscript was compiled
  52. and linked.
  53.  
  54.     - The composite font extensions listed in section A.1.5 of the
  55. Second Edition, and the ability to handle Type 0 fonts.  These facilities
  56. are only available if the compfont feature or the level2 feature was
  57. selected at the time that Ghostscript was compiled and linked.
  58.  
  59.     - The ability to load TrueType fonts and to handle PostScript Type
  60. 42 (encapsulated TrueType) fonts.  These facilities are only available if
  61. the ttfont feature was selected at the time that Ghostscript was compiled
  62. and linked.
  63.  
  64.     - The PostScript Level 2 "filter" facilities aside from DCTEncode
  65. and DCTDecode filters.  These facilities are only available if the filter,
  66. dps, or level2 feature was selected at the time that Ghostscript was
  67. compiled and linked.
  68.  
  69.     - The PostScript Level 2 DCTEncode and DCTDecode filters.  These
  70. facilities are only available if the dct or level2 feature was selected at
  71. the time that Ghostscript was compiled and linked.
  72.  
  73.     - All the other PostScript Level 2 operators and facilities listed
  74. in section A.1.1 of the Second Edition and not listed in any of the other
  75. A.1.n sections.  These facilities are only available if the level2 feature
  76. was selected at the time that Ghostscript was compiled and linked.
  77.  
  78.     - The ability to recognize MS-DOS EPSF files and process only the
  79. PostScript part, ignoring bitmap previews or other information.  This
  80. facility is only available if the epsf feature was selected at the time that
  81. Ghostscript was compiled and linked.
  82.  
  83. Adding all of these produces a full Level 2 PostScript language
  84. interpreter.
  85.  
  86. Ghostscript also includes the optional ability to interpret files in the PDF
  87. 1.2 format defined in the Portable Document Format Reference Manual, Version
  88. 1.2 (November 12, 1996) distributed by Adobe Systems Incorporated.  This
  89. facility is only available if the 'pdf' feature was selected at the time
  90. that Ghostscript was compiled and linked.
  91.  
  92. Ghostscript also includes a number of operators defined below that are not
  93. in the PostScript language.
  94.  
  95. Implementation limits
  96. =====================
  97.  
  98. The following implementation limits correspond to those in Table B.1 and
  99. B.2 of the Second Edition.  Those marked with * are different from the ones
  100. in the Second Edition.
  101.  
  102. Architectural limits
  103. --------------------
  104.  
  105. integer        32-bit two's complement integer
  106. real        single-precision IEEE float
  107. *array
  108.     On 16-bit systems:    8191 elements
  109.     On 32-bit systems:    65535 elements
  110. *dictionary
  111.     On 16-bit systems:    8190 elements
  112.     On 32-bit systems:    65534 elements
  113. *string        65535 characters
  114. *name        16383 characters
  115. filename    100 characters
  116. *save level    none (capacity of memory)
  117. *gsave level    none (capacity of memory)
  118.  
  119. Typical memory limits in Level 1
  120. --------------------------------
  121.  
  122. userdict        200
  123. FontDirectory        100
  124. *operand stack        800
  125. dictionary stack    20
  126. execution stack        250
  127. *interpreter level    none (capacity of memory)
  128. *path            none (capacity of memory)
  129. dash            11
  130. *VM            capacity of memory
  131. *file            determined by operating system
  132. *image            65535 values (samples x components) for 1, 2, 4,
  133.               or 8-bit samples; 32767 values for 12-bit samples
  134.  
  135. Other differences in VM consumption
  136. -----------------------------------
  137.  
  138. Packed array elements occupy either 2 bytes or 8 bytes.  The average
  139. element size is probably about 5 bytes.
  140.  
  141. Names occupy 12 bytes plus the space for the string.
  142.  
  143. Graphics/text operator additions
  144. ================================
  145.  
  146. Graphics state operators
  147. ------------------------
  148.  
  149.     <bool> .setaccuratecurves -
  150.         Sets a graphics state flag that determines whether curves
  151.           and arcs, when flattened, always start and end with a
  152.           line that a segment of the tangent; this also causes
  153.           butt and square caps to be properly perpendicular to
  154.           the tangent.  initgraphics sets this flag to false,
  155.           to match other PostScript implementations.
  156.  
  157.     - .currentaccuratecurves <bool>
  158.         Returns the current value of the accurate curves flag.
  159.  
  160.     <bool> .setclipoutside -
  161.         Sets a graphics state flag that determines whether the
  162.           effective clipping region is the inside (false) or the
  163.           outside (true) of the region defined by the clipping
  164.           operators (clip, rectclip, etc.)  initclip sets this
  165.           flag to false.
  166.  
  167.     - .currentclipoutside <bool>
  168.         Returns the current value of the outside clipping flag.
  169.  
  170.     <bool> .setdashadapt -
  171.         Sets a graphics state flag that determines whether dash
  172.           patterns do (true) or do not (false) automatically scale
  173.           themselves so that each line segment consists of an
  174.           integral number of pattern repetitions.  initgraphics sets
  175.           this flag to false.
  176.  
  177.     - .currentdashadapt <bool>
  178.         Returns the current value of the dash adaptation flag.
  179.  
  180.     <matrix> .setdefaultmatrix -
  181.         Sets the default matrix that is returned by defaultmatrix
  182.           and installed by initmatrix.  Ordinary programs should
  183.           not use this operator.
  184.  
  185.     <num> <bool> .setdotlength -
  186.         Sets a graphics state parameter that determines the handling
  187.           of zero-length lines (dots).  If the dot length is zero,
  188.           dots are painted as circles if round line caps are in
  189.           effect, otherwise they are not painted at all.  If the dot
  190.           length is non-zero, dots are treated exactly like lines of
  191.           the given length: the length is specified in user
  192.           coordinates (like line width) if bool is false, or in
  193.           default user coordinates (1/72" units) if bool is true.
  194.           Dots occurring as part of dash patterns will be oriented
  195.           correctly; isolated dots will be oriented as though they
  196.           were part of a vertical line.  initgraphics sets the dot
  197.           length to zero.
  198.  
  199.     - .currentdotlength <num> <bool>
  200.         Returns the current dot length and dot length mode.
  201.  
  202.     <dx> <dy> .setfilladjust2 -
  203.         Sets graphics state parameters that cause all filled and
  204.           stroked regions to be "fattened" by the given amount
  205.           relative to an algorithm that only paints pixels whose
  206.           centers fall within the region to be painted.
  207.           dx and dy are numbers between 0 and 0.5, measured in
  208.           device space.  The only two values that are likely to
  209.           be useful are 0, which gives a pure center-of-pixel
  210.           rule, and 0.5, which gives Adobe's any-part-of-pixel
  211.           rule.  (0.5 is treated slightly specially in order to
  212.           create half-open pixels per Adobe's specification.)
  213.  
  214.     - .currentfilladjust2 <dx> <dy>
  215.         Returns the current fill adjustment values.
  216.  
  217. Path operators
  218. --------------
  219.  
  220.     - .dashpath -
  221.         If there is no current dash pattern, does nothing.
  222.           Otherwise, does the equivalent of flattenpath and then
  223.           chops up the path as determined by the dash pattern.
  224.  
  225.     <x> <y> <width> <height> .rectappend -
  226.     <numarray> .rectappend -
  227.     <numstring> .rectappend -
  228.         Appends a rectangle or rectangles to the current path, in
  229.           the same manner as rectfill, rectclip, etc.  Only
  230.           defined if the dps and/or level2 option is selected.
  231.  
  232. Painting operators
  233. ------------------
  234.  
  235. Ghostscript supports an experimental extension of the PostScript imaging
  236. model to include RasterOp and some related facilities.  This extension is
  237. only available if the rasterop option was selected when building
  238. Ghostscript.
  239.  
  240. With the RasterOp extension, imaging operations compute a function D =
  241. f(D,S,T) in RGB space, where f is an arbitrary 3-input Boolean function, D
  242. is the destination (frame buffer or print buffer), S is the source
  243. (described below), and T is the texture (the current PostScript color, which
  244. may be a pattern).  The source and texture depend on the PostScript imaging
  245. operation:
  246.  
  247.     - For fill and stroke, the source is solid black, covering the
  248.     region to be painted; the texture is the current PostScript color.
  249.  
  250.     - For show and imagemask, the source is solid black, covering the
  251.     pixels to be painted; the texture is the current PostScript color.
  252.  
  253.     - For image and colorimage, the source is the image data; the
  254.     texture depends on an optional Boolean parameter, CombineWithColor,
  255.     in the image dictionary.  If CombineWithColor is false (the
  256.     default), the texture is solid black.  If CombineWithColor is true,
  257.     the texture is the current color.  For the non-dictionary form of
  258.     the image operator, CombineWithColor is considered to be false.
  259.  
  260. The rasterop option adds the following operators:
  261.  
  262.     <int8> .setrasterop -
  263.         Sets the RasterOp function in the graphics state.
  264.           The default function is 252, Source | Texture.
  265.  
  266.     - .currentrasterop <int8>
  267.         Returns the current RasterOp function.
  268.  
  269.     <bool> .setsourcetransparent -
  270.         Sets source transparency in the graphics state.  When source
  271.           transparency is true, white source pixels prevent storing
  272.           into the destination, regardless of what the RasterOp
  273.           function returns.  The default source transparency is
  274.           false.
  275.  
  276.     - .currentsourcetransparent <bool> -
  277.         Returns the current source transparency.
  278.  
  279.     <bool> .settexturetransparent -
  280.         Sets texture transparency in the graphics state.  When texture
  281.           transparency is true, white texture pixels prevent storing
  282.           into the destination, regardless of what the RasterOp
  283.           function returns.  The default texture transparency is
  284.           false.
  285.  
  286.     - .currenttexturetransparent <bool> -
  287.         Returns the current texture transparency.
  288.  
  289. For more information on RasterOp and transparency, please consult chapter 5
  290. of the "PCL 5 Color Technical Reference Manual", Hewlett-Packard Manual Part
  291. No. 5961-0635.
  292.  
  293. Character operators
  294. -------------------
  295.  
  296.     <string> <bool> .charboxpath -
  297.         For each character C in the rendering of <string>, let the
  298.           bounding box of C *in device space* be the four
  299.           *user-space* points p1x/y, p2x/y, p3x/y, and p4x/y.  For
  300.           each character in order, .charboxpath appends the
  301.           following to the current path:
  302.             - If <bool> is true, the equivalent of:
  303.                 p1x p1y moveto
  304.                 p2x p2y lineto
  305.                 p3x p3y lineto
  306.                 p4x p4y lineto
  307.                 closepath
  308.           This creates a path whose pathbbox is the bbox of the
  309.           string.
  310.             - If <bool> is false, the equivalent of:
  311.                 p1x p1y moveto
  312.                 p3x p3y lineto
  313.           If the CTM is well-behaved (consists only of reflection,
  314.           scaling, and rotation by multiples of 90 degrees), this
  315.           too creates a (simpler) path whose pathbbox is the bbox of
  316.           the string.
  317.  
  318.     <font> <charname|charcode> <charname> <charstring> .type1execchar -
  319.         Does all the work for rendering a Type 1 outline.  This
  320.           operator, like setcharwidth and setcachedevice, is
  321.           only valid in the context of a show operator -- i.e.,
  322.           it must only be called from within a BuildChar or
  323.           BuildGlyph procedure.
  324.  
  325.     <font> <charcode> %Type1BuildChar -
  326.         This is not a new operator: rather, it is a name known
  327.           specially to the interpreter.  Whenever the interpreter
  328.           needs to render a character (during a ...show,
  329.           stringwidth, or charpath), it looks up the name
  330.           BuildChar in the font dictionary to find a procedure to
  331.           run.  If it does not find this name, and if the FontType
  332.           is 1, the interpreter instead uses the value (looked up
  333.           on the dictionary stack in the usual way) of the name
  334.           %Type1BuildChar.
  335.         The standard definition of %Type1BuildChar is in gs_type1.ps.
  336.           Users should not need to redefine %Type1BuildChar, except
  337.           perhaps for tracing or debugging.
  338.  
  339.     <font> <charname> %Type1BuildGlyph -
  340.         Provides the Type 1 implementation of BuildGlyph.
  341.  
  342. Other operator additions
  343. ========================
  344.  
  345. Mathematical operators
  346. ----------------------
  347.  
  348.     <number> arccos <number>
  349.         Computes the arc cosine of a number between -1 and 1.
  350.  
  351.     <number> arcsin <number>
  352.         Computes the arc sine of a number between -1 and 1.
  353.  
  354. String operators
  355. ----------------
  356.  
  357.     <state> <fromString> <toString> .type1encrypt <newState> <toSubstring>
  358.         Encrypts fromString according to the algorithm for Adobe
  359.           Type 1 fonts, writing the result into toString.
  360.           toString must be at least as long as fromString or a
  361.           rangecheck error occurs.  state is the initial state of
  362.           the encryption algorithm (a 16-bit non-negative
  363.           integer); newState is the new state of the algorithm.
  364.  
  365.     <state> <fromString> <toString> .type1decrypt <newState> <toSubstring>
  366.         Decrypts fromString according to the algorithm for Adobe
  367.           Type 1 fonts, writing the result into toString.  Other
  368.           specifications are as for type1encrypt.
  369.  
  370. Relational operators
  371. --------------------
  372.  
  373.     <number|string> <number|string> max <number|string>
  374.         Returns the larger of two numbers or strings.
  375.  
  376.     <number|string> <number|string> min <number|string>
  377.         Returns the smaller of two numbers or strings.
  378.  
  379. File operators
  380. --------------
  381.  
  382.     <string> findlibfile <foundstring> <file> true
  383.     <string> findlibfile <string> false
  384.         Opens the file of the given name for reading, searching
  385.           through directories as described in use.txt.  If the
  386.           search fails, findlibfile simply pushes false on the
  387.           stack and returns, rather than causing an error.
  388.  
  389.     <file> <integer> unread -
  390.          Pushes back the last-read character onto the front of the
  391.           file.  If the file is only open for writing, or if the
  392.           integer argument is not the same as the last character
  393.           read from the file, causes an ioerror error.  May also
  394.           cause an ioerror if the last operation on the file was not
  395.           a reading operation.
  396.  
  397.     <file> <device> writeppmfile -
  398.         Writes the contents of the device, which must be an image
  399.           device, onto the file, in Portable PixMap (ppm) format.
  400.           Does not close the file.
  401.  
  402. Ghostscript also supports the following IODevice in addition to a subset of
  403. those defined in the Adobe documentation: %pipe%command, which opens a pipe
  404. on the given command.  This is only supported on operating systems that
  405. provide popen (primarily Unix systems, and not all of those).
  406.  
  407. Filters
  408. -------
  409.  
  410. Ghostscript supports all the standard PostScript Level 2 filters, except
  411. that it does not currently support the EarlyChange key in the LZWEncode
  412. filter.  Ghostscript also supports the as yet undocumented FlateEncode and
  413. FlateDecode filters from PDF 1.2 and (presumably) PostScript Level 3, except
  414. for the Effort key in FlateEncode.  In addition, Ghostscript supports the
  415. following non-standard filters:
  416.  
  417.     <target> /BCPEncode filter <file>
  418.     <source> /BCPDecode filter <file>
  419.         Create filters that implement the Adobe Binary
  420.           Communications Protocol.  See Adobe documentation for
  421.           details.
  422.  
  423.     <target> <seed_integer> /eexecEncode filter <file>
  424.         Creates a filter for encrypting data into the
  425.           eexec encrypted format described in the
  426.           Adobe Type 1 Font Format documentation.  The
  427.           seed_integer must be 55665 for proper operation.
  428.           This filter produces binary output and does not
  429.           include the initial 4 (or lenIV) garbage bytes.
  430.  
  431.     <source> <seed_integer> /eexecDecode filter <file>
  432.     <source> <dict> /eexecDecode filter <file>
  433.         Creates a filter for decrypting data that has been
  434.           encrypted using eexec encryption as described in the
  435.           Adobe Type 1 Font Format documentation.  The
  436.           seed_integer must be 55665 for proper operation.
  437.           Recognized dictionary keys are:
  438.             seed <16-bit integer> (required)
  439.             lenIV <non-negative integer> (default=4)
  440.  
  441.     <source> /PCXDecode filter <file>
  442.         Creates a filter that decodes data in the run-length
  443.           encoding used in the PCX graphics file format.
  444.  
  445.     <source> <hex_boolean> /PFBDecode filter <file>
  446.         Creates a filter that decodes data in .PFB format, the
  447.           usual semi-binary representation for Type 1 font files
  448.           on IBM PC and compatible systems.  If hex_boolean is true,
  449.           binary packets are converted to hex; if false, binary
  450.           packets are not converted.
  451.  
  452.     <target> <dict> /PixelDifferenceEncode filter <file>
  453.     <source> <dict> /PixelDifferenceDecode filter <file>
  454.         Implements the Predictor=2 pixel-differencing option of the
  455.           LZW filters.  Recognized keys are:
  456.             Colors <integer> 1..4 (default=1)
  457.             BitsPerComponent <integer> 1,2,4,8 (default=8)
  458.             Columns <integer> >= 0 (required)
  459.           See the Adobe "Portable Document Format Reference Manual"
  460.           for details.
  461.  
  462.     <target> <dict> /PNGPredictorEncode filter <file>
  463.     <source> <dict> /PNGPredictorDecode filter <file>
  464.         Implements the "filter" algorithms of the PNG graphics
  465.           format.  Recognized keys are:
  466.             Colors <integer> 1..16 (default=1)
  467.             BitsPerComponent <integer> 1,2,4,8,16 (default=8)
  468.             Columns <integer> >= 0 (default=1)
  469.             Predictor <integer> 10..15 (default=15)
  470.         The Predictor is the PNG algorithm number + 10 for the
  471.           Encoding filter; the Decoding filter ignores Predictor.
  472.           15 means the encoder attempts to optimize the choice of
  473.           algorithm.  For more details, see libpng.mak, which has
  474.           a pointer to the PNG specification.
  475.  
  476.     <target> /TBCPEncode filter <file>
  477.     <source> /TBCPDecode filter <file>
  478.         Create filters that implement the Adobe Tagged Binary
  479.           Communications Protocol.  See Adobe documentation for
  480.           details.
  481.  
  482.     <target> /zlibEncode filter <file>
  483.     <source> /zlibDecode filter <file>
  484.         Creates filters that use the zlib data compression method
  485.           (the same method used by the gzip application).
  486.           This filter is only available if the fzlib feature was
  487.           selected when Ghostscript was compiled and linked.
  488.  
  489. Various versions of Ghostscript may also support other non-standard filters
  490. for experimental purposes.  The current version includes the following
  491. non-standard filters, which are not documented further.  No guarantee is
  492. made that these filters will exist in compatible form, or at all, in future
  493. versions.
  494.  
  495.     <target/source> <string> ByteTranslateEncode/Decode
  496.     <target> <int> BigStringEncode
  497.     <target/source> <dict> BoundedHuffmanEncode/Decode
  498.         FirstBitLowOrder <bool> false
  499.         MaxCodeLength <int> 16
  500.         EndOfData <bool> true
  501.         EncodeZeroRuns <int> 256
  502.         Tables <int_array>
  503.     <target/source> <dict> BWBlockSortEncode/Decode
  504.         BlockSize <int> 16384
  505.     <target/source> MoveToFrontEncode/Decode
  506.  
  507. Ghostscript also supports additional keys in the optional dictionary
  508. operands for some filters.  For the LZWDecode filter:
  509.  
  510.     InitialCodeLength <integer>
  511.         An integer between 2 and 11 specifying the initial number
  512. of data bits per code.  Note that the actual initial code length is 1
  513. greater than this, to allow for the reset and end-of-data code values.
  514. Default value: 8.
  515.  
  516.     FirstBitLowOrder <boolean>
  517.         If true, codes appear with their low-order bit first.
  518. Default value: false.
  519.  
  520.     BlockData <boolean>
  521.         If true, the data is broken into blocks in the manner
  522. specified for the GIF file format.  Default value: false.
  523.  
  524. For the CCITTFaxEncode and CCITTFaxDecode filters:
  525.  
  526.     DecodedByteAlign <integer>
  527.         An integer N with the value 1, 2, 4, 8, or 16, specifying
  528. that decoded data scan lines are always a multiple of N bytes.  The encoding
  529. filter skips data in each scan line from Columns to the next multiple of N
  530. bytes; the decoding filter pads each scan line to a multiple of N bytes.
  531. Default value: 1.
  532.  
  533. Virtual memory operators
  534. ------------------------
  535.  
  536.     <save> .forgetsave -
  537.         Cancels the effect of a save -- makes it as though the
  538.           save never happened.
  539.  
  540. Miscellaneous operators
  541. -----------------------
  542.  
  543.     <string> getenv <string> true
  544.     <string> getenv false
  545.         Looks up a name in the shell environment.  If the name is
  546.           found, returns the corresponding value and true; if the
  547.           name is not found, returns false.
  548.  
  549.     <name> <array> .makeoperator <operator>
  550.         Constructs and returns a new operator that is actually the
  551.           given procedure in disguise.  The name is only used for
  552.           printing.  The operator has the executable attribute.
  553.         Operators defined in this way do one other thing besides
  554.           running the procedure: if an error occurs during the
  555.           execution of the procedure, and there has been no net
  556.           reduction in operand or dictionary stack depth, the
  557.           operand or dictionary stack pointer respectively is reset
  558.           to its position at the beginning of the procedure.
  559.  
  560.     <string> <boolean> .setdebug -
  561.         If the Ghostscript interpreter was built with the DEBUG
  562.           flag set, sets or resets any subset of the debugging
  563.           flags normally controlled by -Z in the command line.
  564.           Has no effect otherwise.
  565.  
  566.     - .oserrno <errno>
  567.         Returns the error code for the most recent OS error.
  568.  
  569.     - .oserror <string>
  570.         Returns the error string for the most recent OS error.
  571.  
  572. Device operators
  573. ----------------
  574.  
  575.     <device> copydevice <device>
  576.         Copies a device.  The copy is writable and installable.
  577.  
  578.     <index> .getdevice <device>
  579.         Returns a device from the set of devices known to the
  580.           system.  The first device, which is default, is numbered
  581.           0.  If the index is out of range, causes a rangecheck
  582.           error.  This device is actually a prototype, not a
  583.           directly usable device, and is marked read-only;
  584.           it cannot have its parameters changed or be installed as
  585.           the current device.
  586.  
  587.     <matrix> <width> <height> <palette> makeimagedevice <device>
  588.         Makes a new device that accumulates an image in memory.
  589.           matrix is the initial transformation matrix: it must be
  590.           orthogonal (i.e., [a 0 0 b x y] or [0 a b 0 x y]).
  591.           palette is a string of 2^N or 3*2^N elements, specifying
  592.           how the 2^N possible pixel values will be interpreted.
  593.           Each element is interpreted as a gray value, or as RGB
  594.           values, multiplied by 255.  For example, if you want
  595.           a monochrome image for which 0=white and 1=black, the
  596.           palette should be <ff 00>; if you want a 3-bit deep
  597.           image with just the primary colors and their complements
  598.           (ignoring the fact that 3-bit images are not supported),
  599.           the palette might be <000000 0000ff 00ff00 00ffff
  600.           ff0000 ff00ff ffff00 ffffff>.  At present, the palette
  601.           must contain exactly 2, 4, 16, or 256 entries,
  602.           and must contain an entry for black and an entry
  603.           for white; if it contains any entries that aren't black,
  604.           white, or gray, it must contain at least the six primary
  605.           colors (red, green, blue, and their complements cyan,
  606.           magenta, and yellow); aside from this, its contents are
  607.           arbitrary.
  608.         Alternatively, palette can be 16, 24, 32, or null
  609.           (equivalent to 24).  These are interpreted as:
  610.             16 = 5R, 6G, 5B bits;
  611.             24 = 8R, 8G, 8B bits;
  612.             32 = 8C, 8M, 8Y, 8K bits.
  613.         Note that one can also make an image device (with the same
  614.           palette as an existing image device) by copying a device
  615.           using the copydevice operator.
  616.  
  617.     <matrix> <width> <height> <palette> <word?> makewordimagedevice
  618.         <device>
  619.         Makes an image device as described above.  word? is a
  620.           Boolean value indicating whether the data should be stored
  621.           in a word-oriented format internally.  No ordinary
  622.           PostScript programs should use this operator.
  623.  
  624.     <device> <index> <string> copyscanlines <substring>
  625.         Copies one or more scan lines from an image device into a
  626.           string, starting at a given scan line in the image.
  627.           The data is in the same format as for the image
  628.           operator.  Error if the device is not an image device or
  629.           if the string is too small to hold at least one complete
  630.           scan line.  Always copies an integral number of scan
  631.           lines.
  632.  
  633.     <device> setdevice -
  634.         Sets the current device to the specified device.  Also
  635.           resets the transformation and clipping path to the
  636.           initial values for the device.  Signals an invalidaccess
  637.           error if the device is a prototype.
  638.  
  639.     - currentdevice <device>
  640.         Gets the current device from the graphics state.
  641.  
  642.     <device> getdeviceprops <mark> <name1> <value1> ... <namen> <valuen>
  643.         Gets the properties of a device.  See the "device
  644.           parameters" section below for details.
  645.  
  646.     <mark> <name1> <value1> ... <namen> <valuen> <device>
  647.         putdeviceprops <device>
  648.         Sets properties of a device.  May cause undefined,
  649.           typecheck, rangecheck, or limitcheck errors.
  650.  
  651.     - flushpage -
  652.         On displays, flushes any buffered output, so that it
  653.           is guaranteed to show up on the screen; on printers,
  654.           has no effect.
  655.  
  656. Device parameters
  657. =================
  658.  
  659. Ghostscript supports the concept of device parameters for all devices, not
  660. just page devices.  (For non-page devices, these are accessible through
  661. get/putdeviceprops, as indicated above.)
  662.  
  663. Here are the currently defined parameters for all devices:
  664.  
  665.     BitsPerPixel <integer> (usually read-only)
  666.         Number of bits per pixel.
  667.  
  668.     .HWMargins [<4 floats>]
  669.         Size of non-imageable regions around the edges
  670.           of the page, in 1/72" units.
  671.  
  672.     HWSize [<integer> <integer>]
  673.         X and Y size in pixels.
  674.  
  675.     Name <string> (read-only)
  676.         The device name.  Currently, same as OutputDevice.
  677.  
  678.     Colors, GrayValues, RedValues, GreenValues,
  679.       BlueValues, ColorValues (usually read-only)
  680.         As for the 'deviceinfo' operator of Display PostScript.
  681.           Red/Green/Blue/ColorValues are only defined if Colors > 1.
  682.  
  683.     TextAlphaBits, GraphicsAlphaBits (usually read-only)
  684.         The number of bits of anti-aliasing
  685.           information for text or graphics
  686.           respectively.  Legal values are 1 (no
  687.           anti-aliasing), 2, or 4; the default value
  688.           for most devices is 1.
  689.  
  690. In addition, the following are defined per Adobe's documentation for the
  691. setpagedevice operator:
  692.     Duplex (if supported)
  693.     HWResolution
  694.     ImagingBBox
  695.     Margins
  696.     NumCopies (for printers only)
  697.     Orientation (if supported)
  698.     OutputDevice
  699.     PageOffset (write-only)
  700.     PageSize
  701.     ProcessColorModel
  702. Some devices may only allow certain values for HWResolution and PageSize.
  703. The null device ignores attempts to set PageSize; its size is always [0 0].
  704.  
  705. For printers, the following are also defined:
  706.  
  707.     BufferSpace <integer>
  708.         Buffer space for band lists, if the bitmap
  709.           is too big to fit in RAM.
  710.  
  711.     MaxBitmap <integer>
  712.         Maximum space for a full bitmap in RAM.
  713.  
  714.     OutputFile <string>
  715.         () means send to printer directly,
  716.           otherwise specifies the file name for
  717.           output; a %d is replaced by the page #;
  718.           on Unix systems, (|command) writes to a pipe
  719.  
  720.     OpenOutputFile <boolean>
  721.         If true, open the device's output file
  722.           when the device is opened, rather than
  723.           waiting until the first page is ready to
  724.           print.
  725.  
  726.     PageCount <integer> (read-only)
  727.         Counts the number of pages printed on the device.
  728.  
  729. The following parameters are for use only by very specialized applications
  730. that separate band construction from band rasterization.  Improper use may
  731. cause unpredictable errors.  In particular, if you only want to allocate
  732. more memory for banding, to increase band size and improve performance, use
  733. the BufferSpace parameter, not BandBufferSpace.
  734.  
  735.     BandHeight <integer>
  736.         The height of bands when banding.  0 means use the largest
  737.           band height that will fit within the BandBufferSpace
  738.           (or BufferSpace, if BandBufferSpace is not specified).
  739.  
  740.     BandWidth <integer>
  741.         The width of bands in the rasterizing pass, in pixels.  0
  742.           means use the actual page width.
  743.  
  744.     BandBufferSpace <integer>
  745.         The size of the band buffer in the rasterizing pass, in
  746.           bytes.  0 means use the same buffer size as for the
  747.           interpretation pass.
  748.  
  749. In addition, Ghostscript supports the following parameter for
  750. setpagedevice/currentpagedevice that is *not* a device parameter per se:
  751.  
  752.     ViewerPreProcess    procedure
  753.         Specifies a procedure to be applied to the page device
  754.           dictionary before any other processing is done.  The
  755.           procedure may not alter the dictionary, but it may return
  756.           a modified copy.  This "hook" is provided for use by
  757.           viewing programs such as GSview.
  758.  
  759. Miscellaneous additions
  760. =======================
  761.  
  762. run can take either a string or a file as its argument.  In the latter
  763. case, it just runs the file, closing it at the end, and trapping errors
  764. just as for the string case.
  765.  
  766. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  767.  
  768. PostScript is a trademark of Adobe Systems, Incorporated.
  769.